package com.link.base.tencent.corpwx.agent.service;

import com.alibaba.fastjson.JSONObject;
import com.link.base.tencent.corpwx.agent.model.Agent;
import com.link.core.basic.service.BasicService;

/**
 * 应用access_token服务
 *
 * @author 欧阳振强
 * @date 2019/1/2
 */
public interface AgentService extends BasicService<Agent> {

    /**
     * 根据企业微信应用的名称获取当前的应用信息
     *
     * @author 李宗庭
     * @date 2019/1/22
     * @param  record
     */
    Agent queryAgentByName(Agent record) throws Exception;

    /**
     * 根据企业微信应用的agentId获取当前应用信息
     *
     * @author 李宗庭
     * @date 2019/1/22
     * @param  record
     */
    Agent queryAgentById(Agent record) throws Exception;

    /**
     * 根据agentId获取应用信息，并刷新和返回其access_token
     *
     * @author 欧阳振强
     * @date 2019/1/2
     * @param agentId 应用Id
     */
    String refreshAgentTokenByAgentId(String agentId) throws Exception;

    /**
     * 获取所有应用信息，并刷新其access_token
     *
     * @author 欧阳振强
     * @date 2019/1/2
     */
    void refreshAllTokenByAgentId() throws Exception;

    /**
     * 根据agentId获取access_token
     *
     * @author 欧阳振强
     * @date 2019/1/2
     * @param agentId 应用Id
     */
    String getExistAccessToken(String agentId) throws Exception;

    /**
     * 根据agentId获取企业JsTicket
     *
     * @author 欧阳振强
     * @date 2019/1/2
     * @param agentId 应用Id
     */
    String getExistJsTicket(String agentId) throws Exception;

    /**
     * 根据agentId获取第三方应用JsTicket
     * @author lizt
     * @date 2019/1/24
     * @param agentId 应用Id
     */
    String getExistAgentJsTicket(String agentId) throws Exception;

    /**
     * 获取session_key
     * @param corpId  应用id
     * @param code    小程序传递的code
     * @return
     * @throws Exception
     */
    JSONObject getSessionKey(String corpId, String code) throws Exception;

    /**
     * 缓存sessionKey
     * @param userIdSession 调用腾讯codeToSession接口返回的json字符串
     */
    void cacheSessionKey(JSONObject userIdSession);


}
